package com.py.framework.service;

import java.util.List;
import java.util.Map;

import com.py.framework.entity.OfficeEntity;

/**
 *  部门管理Service
 * @author Leegern
 * @date   2018年4月25日
 */
public interface OfficeService {
	
	/**
	 * 添加部门实体
	 * @param entity 部门实体
	 * @return
	 */
	int addOfficeInfo(OfficeEntity entity);

	/**
	 * 根据部门ID获取区域ID
	 *
	 * @param id
	 * @return int
	 * @author YaoS
	 * @date 19:11 19/1/4
	 **/
	int getAreaIdByDeptId(String id);

	/**
	 * 分页查询部门列表
	 * @param params
	 * @return
	 */
	List<OfficeEntity> queryOfficeForPage(Map<String, Object> params);
	
	/**
	 * 根据Id查询部门数据
	 * @param officeId 父部门Id
	 * @return
	 */
	List<OfficeEntity> getOfficesByOfficeId(String officeId);
	
	/**
	 * 根据部门Id获取部门信息
	 * @param id 部门Id
	 * @return
	 */
	OfficeEntity findOneOffice(long id);
	
	/**
	 * 更新部门信息
	 * @param entity 部门实体
	 * @return
	 */
	int updateOffice(OfficeEntity entity);
	
	/**
	 * 批量删除部门
	 * @param ids 部门Id集合
	 * @return
	 */
	int batchDelOffice(List<Long> ids);
	
	/**
	 * 获取用户部门
	 * @param userId 用户Id
	 * @return
	 */
	OfficeEntity getUserOffice(long userId);
	
	/**
	 * 根据部门编码判断是否有重复数据
	 * @param officeCode  部门编码
	 * @param officeId    部门Id
	 * @return
	 */
	List<OfficeEntity> getOfficesByCode(long officeId, String officeCode);
	
	/**
	 * 获取顶级部门数据
	 * @return
	 */
	List<OfficeEntity> getRootOffices();
	
	/**
	 * 获取部门信息
	 * @param parentId 部门Id
	 * @return
	 */
	List<OfficeEntity> getOfficesByPid(long parentId);

	/**
	 * 根据区域Id查询部门数据
	 * @param areaId 区域Id
	 * @return
	 */
	List<OfficeEntity> getOfficesByAreaId(long areaId);
	
	/**
	 * 获取所有部门数据
	 * @return
	 */
	List<OfficeEntity> getAllOffices();
	
	/**
	 * 根据父部门Id获取子部门数据
	 * @param parentId 父部门Id
	 * @return
	 */
	List<OfficeEntity> getOfficesByParentId(String parentId);
	
	/**
	 * 根据区域Id获取部门以及子部门数据
	 * @param areaId 区域Id
	 * @return
	 */
	List<OfficeEntity> getSubOfficesByAreaId(long areaId);

	/**
	 * 一键生成部门token
	 */
	void generateOfficeToken();

	/**
	 * 
	 *
	 * @Function 校验新增权限
	 * @FileName OfficeService.java
	 * @MethodName checkAddPermission
	 * @param params
	 * @return
	 * @Date 2018年11月27日 下午2:30:56
	 * @Author Min DongXv
	 *
	 */
	int checkAddPermission(Map<String, Object> params);

	/**
	 * 查询已删除的部门
	 *
	 * @return 已删除的部门id
	 * @author YaoS
	 * @date 19/5/27 14:38
	 */
	List<String> deleteDept();
	
	
	Long getDeptIdByName(String deptName);
}